home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / share / system-config-printer / smburi.py < prev    next >
Text File  |  2008-10-20  |  3KB  |  96 lines

  1. #!/usr/bin/env python
  2.  
  3. ## system-config-printer
  4.  
  5. ## Copyright (C) 2006, 2007, 2008 Red Hat, Inc.
  6. ## Copyright (C) 2006, 2007 Florian Festi <ffesti@redhat.com>
  7. ## Copyright (C) 2006, 2007, 2008 Tim Waugh <twaugh@redhat.com>
  8.  
  9. ## This program is free software; you can redistribute it and/or modify
  10. ## it under the terms of the GNU General Public License as published by
  11. ## the Free Software Foundation; either version 2 of the License, or
  12. ## (at your option) any later version.
  13.  
  14. ## This program is distributed in the hope that it will be useful,
  15. ## but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17. ## GNU General Public License for more details.
  18.  
  19. ## You should have received a copy of the GNU General Public License
  20. ## along with this program; if not, write to the Free Software
  21. ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22.  
  23. import urllib
  24.  
  25. class SMBURI:
  26.     def __init__ (self,
  27.                   uri=None,
  28.                   group='', host='', share='', user='', password=''):
  29.         if uri:
  30.             if group or host or share or user or password:
  31.                 raise RuntimeError
  32.  
  33.             if uri.startswith ("smb://"):
  34.                 uri = uri[6:]
  35.  
  36.             self.uri = uri
  37.         else:
  38.             self.uri = self._construct (group, host, share,
  39.                                         user=user, password=password)
  40.  
  41.     def _construct (self, group, host, share, user='', password=''):
  42.         uri_password = ''
  43.         if password:
  44.             uri_password = ':' + urllib.quote (password)
  45.         if user:
  46.             uri_password += '@'
  47.         uri = "%s%s%s" % (urllib.quote (user),
  48.                           uri_password,
  49.                           urllib.quote (group))
  50.         if len (uri) > 0:
  51.             uri += '/'
  52.         uri += urllib.quote (host)
  53.         if len (share) > 0:
  54.             uri += "/" + urllib.quote (share)
  55.         return uri
  56.  
  57.     def get_uri (self):
  58.         return self.uri
  59.  
  60.     def sanitize_uri (self):
  61.         group, host, share, user, password = self.separate ()
  62.         return self._construct (group, host, share)
  63.  
  64.     def separate (self):
  65.         uri = self.get_uri ()
  66.         user = ''
  67.         password = ''
  68.         auth = uri.find ('@')
  69.         if auth != -1:
  70.             u = uri[:auth].find(':')
  71.             if u != -1:
  72.                 user = uri[:u]
  73.                 password = uri[u + 1:auth]
  74.             else:
  75.                 user = uri[:auth]
  76.             uri = uri[auth + 1:]
  77.         sep = uri.count ('/')
  78.         group = ''
  79.         if sep == 2:
  80.             g = uri.find('/')
  81.             group = uri[:g]
  82.             uri = uri[g + 1:]
  83.         if sep < 1:
  84.             host = ''
  85.         else:
  86.             h = uri.find('/')
  87.             host = uri[:h]
  88.             uri = uri[h + 1:]
  89.             p = host.find(':')
  90.             if p != -1:
  91.                 host = host[:p]
  92.         share = uri
  93.         return (urllib.unquote (group), urllib.unquote (host),
  94.                 urllib.unquote (share),
  95.                 urllib.unquote (user), urllib.unquote (password))
  96.